#include "Administrador.h"

Administrador::Administrador(double precioPorHora) {
	this->precioPorHora = precioPorHora;

	this->cantidadAutosSem = new Semaforo(
			Utils::NOMBRE_ARCHIVO_PARA_LOCK_CONTADOR_AUTOS, 1, 'W');
	//perror("Semaforo Lock auto");
	this->dineroRecaudadaSem = new Semaforo(
			Utils::NOMBRE_ARCHIVO_PARA_LOCK_DINERO_RECAUDADO, 1, 'M');
	//perror("Semaforo Lock dinero");
	this->cantidadAutos.crear(Utils::NOMBRE_ARCHIVO_PARA_CONTADOR_DE_AUTOS_MC,
			Utils::LETRA_PARA_CONTADOR_DE_AUTOS_MC);
	this->cantidadAutos.escribir(0);

	this->dineroRecaudada.crear(Utils::NOMBRE_ARCHIVO_PARA_DINERO_RECAUDADO_MC,
			Utils::LETRA_PARA_DINERO_RECAUDADO_MC);
	this->dineroRecaudada.escribir(0.0);

}

double Administrador::consultarDineroRecaudado() {
	this->dineroRecaudadaSem->p();
	double dinero = *this->dineroRecaudada.leer();
	this->dineroRecaudadaSem->v();
	return dinero;
}

int Administrador::consultarCantidadAutos() {
	this->cantidadAutosSem->p();
	int cantidad = *this->cantidadAutos.leer();
	this->cantidadAutosSem->v();
	return cantidad;
}

void Administrador::sacarAuto(Auto * autoSaliendo) {
	this->operarSobreCantidadAutos(-1);
	this->sumarDinero(this->precioPorHora * autoSaliendo->getCantHoras());
}

void Administrador::entraAuto() {
	this->operarSobreCantidadAutos(1);
}

void Administrador::terminar() {
	this->cantidadAutos.liberar();
	this->dineroRecaudada.liberar();
	this->cantidadAutosSem->eliminar();
	this->dineroRecaudadaSem->eliminar();
}

void Administrador::operarSobreCantidadAutos(int valor) {
	this->cantidadAutosSem->v();
	int cantidad = *this->cantidadAutos.leer() + valor;
	this->cantidadAutos.escribir(cantidad);
	this->cantidadAutosSem->p();
}

void Administrador::sumarDinero(double valor) {
	this->dineroRecaudadaSem->p();
	double dinero = *this->dineroRecaudada.leer() + valor;
	this->dineroRecaudada.escribir(dinero);
	this->dineroRecaudadaSem->v();
}

void Administrador::liberarMemoria() {
	this->cantidadAutos.liberar();
	this->dineroRecaudada.liberar();
}

Administrador::~Administrador() {

}

